package org.framework2.utils;

import java.util.UUID;

import org.apache.commons.lang.StringUtils;

/**
 * Description: ID生成器
 * @author ahli Apr 21, 2009
 */
public class IDUtils
{

	/**
	 * 自增序列
	 */
	private static long count = 0L;

	/**
	 * 最后产生随机数的time
	 */
	private static long lastTime = 0L;

	/**
	 * uuid分隔符
	 */
	private static final String UUID_SP = "-";
	
	/**
	 * uuid替换符
	 */
	private static final String UUID_RP = "";
	
	/**
	 * 私有构造
	 */
	private IDUtils() {
	}

	/**
	 * 同步生成递增
	 * @return 19位长度随机数
	 */
	public static synchronized long nextNumber() {
		long curTime = System.currentTimeMillis() * 1000000L;
		// 如果本次随机数产生时间与上一次产生时间在毫秒级别
		// 是一样的，则自增数++，否则自增序列归0
		if (lastTime != curTime) {
			count = 0;
			lastTime = curTime;
		}
		return curTime + nextCountValue();
	}

	/**
	 * 获取6位长度序列自增数
	 * 
	 * @return
	 */
	private static long nextCountValue() {
		if (count >= 999999L) {
			count = 0;
		} else {
			count = count + 1L;
		}
		return Long.parseLong(StringUtils
				.leftPad(String.valueOf(count), 6, '0'));
	}
	
	/**
	 * 生成一个UUID
	 * @return    UUID
	 */
	public static String uuid(){
		String s = UUID.randomUUID().toString();//
		return s.replaceAll(UUID_SP, UUID_RP);
	}
}
